package com.shan;

/**
 * Author: shanzheng  同步块的使用，即块锁的使用<br/>
 * Description: <br/>
 * Date： 15:03 2017/8/29.<br/>
 * Modified By: <br/>
 */
public class SynchronizedThread2 extends Thread {
    private void testSynchronizedBlock(String obj) {
        //使用this对象控制同一对象实例之间的同步
        //第二种情况;用synchronized (SynchronizedThread2.class)代替
//        synchronized (this)
        synchronized (obj) {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName()
                        + " testSynchronizedBlock:" + i + ",执行的对象为：" + obj);

                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public void run() {
        String s = "020000001";
        testSynchronizedBlock(s);
    }

    public static void main(String[] args) {
        /*第一种情况：同步块的普通使用 start*/
        //能够更好的发挥多线程并行执行的效率。
        String s = "020000001";
        String s2 = "020000002";
        SynchronizedThread2 t = new SynchronizedThread2();
        t.start();
        t.testSynchronizedBlock(s);

        SynchronizedThread2 t2 = new SynchronizedThread2();
        t2.start();
        t2.testSynchronizedBlock(s2);
        /*第一种情况：同步块的普通使用 end*/

        /*第二种情况：使用class对象控制不同实例之间的同步 start*/
//        SynchronizedThread2 t1 = new SynchronizedThread2();
//        t1.start();
//        SynchronizedThread2 t2 = new SynchronizedThread2();
//        t2.start();
        /*第二种情况：使用class对象控制不同实例之间的同步 start*/
    }
}
